﻿Imports System.Data
Imports System.Configuration
Imports System.Collections.Generic
Imports System.Data.SqlClient
Imports TepcelDominio
Imports TepcelDAL.DBManager
Imports System.Security.Cryptography
Imports System.Text

Public Class UsuarioDAL : Inherits DBManager
    Public Function NuevoUsuario(ByVal usuario As Usuario) As String
        Dim comando As SqlCommand = MyBase.CreateSelectCommand("SPInsertUsuario")

        comando.Parameters.Add("@codigoUsuario", SqlDbType.Char, 4).Value = usuario.codigoUsuario
        comando.Parameters.Add("@loginUsuario", SqlDbType.VarChar, 10).Value = usuario.loginUsuario
        comando.Parameters.Add("@passwordUsuario", SqlDbType.VarChar, 15).Value = usuario.passwordUsuario
        comando.Parameters.Add("@estadoUsuario", SqlDbType.Char, 1).Value = usuario.estadoUsuario
        comando.Parameters.Add("@codigoEmpleado", SqlDbType.Char, 4).Value = usuario.codigoEmpleado

        comando.Parameters("@codigoUsuario").Direction = ParameterDirection.InputOutput

        MyBase.ExecuteQuery(comando)
        usuario.codigoUsuario = comando.Parameters("@codigoUsuario").Value

        Return usuario.codigoUsuario

    End Function

    Public Function GetAllFromUsuario() As List(Of Usuario)
        Dim comando As SqlCommand = MyBase.CreateSelectCommand("GetAllFromUsuario")
        Return SelectObjectFactory(comando)
    End Function

    Public Function SearchFromUsuario(ByVal texto As String) As List(Of Usuario)
        Dim comando As SqlCommand = MyBase.CreateSelectCommand("searchUsuario")

        comando.Parameters.Add("@texto", SqlDbType.VarChar, 200).Value = texto

        Return SelectObjectFactory(comando)

    End Function

    Public Function DeleteUsuario(ByVal codigoUsuario As String) As Boolean
        Dim correcto As Boolean = False
        Dim comando As SqlCommand = MyBase.CreateSelectCommand("DeleteUsuario")

        comando.Parameters.Add("@codigoUsuario", SqlDbType.Char, 4).Value = codigoUsuario

        If MyBase.ExecuteQuery(comando) > 0 Then
            correcto = True
        End If
        Return correcto
    End Function

    Public Function ValidarUsuario(ByRef usuario As Usuario) As Boolean
        Dim comando As SqlCommand = MyBase.CreateSelectCommand("ValidarUsuario")
        comando.Parameters.Add("@loginUsuario", SqlDbType.VarChar, 10).Value = usuario.loginUsuario
        comando.Parameters.Add("@passwordUsuario", SqlDbType.VarChar, 15).Value = usuario.passwordUsuario
        Using reader As SqlDataReader = MyBase.ExecuteReader(comando)
            If reader.HasRows = True Then
                reader.Read()
                usuario.codigoUsuario = reader.GetString(0)
                usuario.estadoUsuario = reader.GetString(3)

                Return True
            Else
                Return False
            End If
        End Using
    End Function

    Private Function SelectObjectFactory(ByVal comando As SqlCommand) As List(Of Usuario)
        Dim Lista As New List(Of Usuario)
        Using reader As SqlDataReader = MyBase.ExecuteReader(comando)
            While reader.Read
                Dim Usuario As New Usuario(reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetString(4))
                Lista.Add(Usuario)
                Usuario = Nothing
            End While
        End Using
        Return Lista
    End Function

    Private Function EncriptarPassword(ByVal Texto As String) As String
        'Creamos un objeto de codificación Unicode que
        'representa una codificación UTF-16 de caracteres Unicode. 
        Dim Codificar As New UnicodeEncoding()
        'Declaramos una matriz (array) de tipo Byte para recuperar dentro los bytes del texto
        'utilizando el objeto Codificar
        Dim ByteTexto() As Byte = Codificar.GetBytes(Texto)
        'Instanciamos el objeto MD5 
        Dim Md5 As New MD5CryptoServiceProvider()
        'Se calcula el Hash del Texto en bytes 
        Dim ByteHash() As Byte = Md5.ComputeHash(ByteTexto)
        'convertimos el texto en bytes en texto legible(cadena) 
        Return Convert.ToBase64String(ByteHash)
        'Eliminamos los objetos usados con Nothing
        Codificar = Nothing
        ByteTexto = Nothing
    End Function

End Class
